package com.cshuig.patterns.javaApiClone;

/**
 * Created by hogan on 2015/8/12.
 */
public abstract class Prototype implements Cloneable {
    /**
     * 一些过程问题记录：
     * 1、clone的过程，不会去调用类的默认构造函数(即无参构造函数)
     * 2、浅度拷贝，即Object类提供的clone只会拷贝对象本身，对象内部的数组、引用对象等不会被拷贝，还是指向原型对象内部元素的地址，大家共享一个地址，每个引用对象都可以修改，不安全
     * 3、当使用clone方法时，有两种条件的对象不会被拷贝 1)类基本的成员变量  2）必须是一个对象，而不是原始类型
     * 4、spring框架中深度clone应用的非常广泛，如 @Component("beanName") @Scope("prototype")
     */


    /**
     * 原型模式的优点：
     * 1、原型模式是内存中的二进制流的拷贝，要比直接new一个对象性能好很多,特别是在一个循环体内部产生大量的对象时，原型模式就可以很好的发挥出它的优点
     * 2、因为是直接在内存中拷贝，所以构造函数是不会执行的
     */

    /**
     * 原型模式的使用场景
     * 1、当一个对象的创建过程需要耗费非常多的资源（如：非常繁杂的数据准备）
     * 2、一个对象被多个对象使用并修改，且要求 我改我的，你改你的，各影响，
     */


}
